﻿namespace Core.Helpers;

/// <summary>
/// 异常帮助类
/// </summary>
public static class ExceptionHelper
{
    /// <summary>
    /// 检查参数是否为 null 或空白，并在无效时抛出 ArgumentNullException。
    /// </summary>
    /// <param name="value">要检查的字符串值。</param>
    /// <param name="paramName">参数名称，用于异常消息。</param>
    public static void ThrowIfNullOrWhiteSpace(string value, string paramName)
    {
        if (string.IsNullOrWhiteSpace(value))
        {
            throw new BoilerplateException($"{paramName}");
        }
    }

    /// <summary>
    /// 检查参数是否为 null，并在无效时抛出 ArgumentNullException。
    /// </summary>
    /// <param name="value">要检查的对象值。</param>
    /// <param name="paramName">参数名称，用于异常消息。</param>
    public static void ThrowIfNull(object? value, string paramName)
    {
        if (value == null)
        {
            throw new BoilerplateException($"{paramName}");
        }
    }

    /// <summary>
    /// 检查参数是否为 非空null，并在无效时抛出 ArgumentNullException。
    /// </summary>
    /// <param name="value">要检查的对象值。</param>
    /// <param name="paramName">参数名称，用于异常消息。</param>
    public static void ThrowIfNotNull(object? value, string paramName)
    {
        if (value != null)
        {
            throw new BoilerplateException($"{paramName}");
        }
    }

    /// <summary>
    /// 检查参数是否在指定的范围内，并在无效时抛出 ArgumentOutOfRangeException。
    /// </summary>
    /// <param name="value">要检查的整数值。</param>
    /// <param name="min">最小允许值。</param>
    /// <param name="max">最大允许值。</param>
    /// <param name="paramName">参数名称，用于异常消息。</param>
    public static void ThrowIfOutOfRange(int value, int min, int max, string paramName)
    {
        if (value <= min || value >= max)
        {
            throw new BoilerplateException($"参数必须在 {min} 和 {max}之间");
        }
    }

    /// <summary>
    /// 检查条件是否为 false，并在无效时抛出 InvalidOperationException。
    /// </summary>
    /// <param name="condition">要检查的条件。</param>
    /// <param name="message">异常消息。</param>
    public static void ThrowIfFalse(bool condition, string message)
    {
        if (!condition)
        {
            throw new BoilerplateException(message);
        }
    }

    /// <summary>
    /// 检查条件是否为 true，并在无效时抛出 InvalidOperationException。
    /// </summary>
    /// <param name="condition">要检查的条件。</param>
    /// <param name="message">异常消息。</param>
    public static void ThrowIfTrue(bool condition, string message)
    {
        if (condition)
        {
            throw new BoilerplateException(message);
        }
    }
}
